package com.qiguliuxing.dts.core.system;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * 配置基类，该类实际持有所有的配置，子类只是提供代理访问方法
 */
abstract class BaseConfig {

	// 所有的配置均保存在该 HashMap 中
	protected static Map<String, String> configs = new HashMap<>();

	/**
	 * 添加配置到公共Map中
	 *
	 * @param key
	 * @param value
	 */
	public static void addConfig(String key, String value) {
		configs.put(key, value);
	}

	/**
	 * 重载配置,传入子类的prefix
	 */
	public static void reloadConfig(String prefix) {
		// 先遍历删除该 prefix 所有配置
		for (Iterator<Map.Entry<String, String>> it = configs.entrySet().iterator(); it.hasNext();) {
			Map.Entry<String, String> item = it.next();
			if (item.getKey().startsWith(prefix))
				it.remove();
		}

		ConfigService.getSystemConfigService().reloadConfig(prefix);
	}

	/**
	 * 按String类型获取配置值
	 *
	 * @param keyName
	 * @return
	 */
	protected static String getConfig(String keyName) {
		return configs.get(keyName);
	}

	/**
	 * 以Integer类型获取配置值
	 *
	 * @param keyName
	 * @return
	 */
	protected static Integer getConfigInt(String keyName) {
		return Integer.parseInt(configs.get(keyName));
	}

	/**
	 * 以BigDecimal类型获取配置值
	 *
	 * @param keyName
	 * @return
	 */
	protected static BigDecimal getConfigBigDec(String keyName) {
		return new BigDecimal(configs.get(keyName));
	}

	/**
	 * 子类实现该方法，并告知父类配置前缀，该前缀用来索引配置组用于简化访问和按组重读配置
	 *
	 * @return
	 */
	abstract String getPrefix();
}
